home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / doc / gcc-4.4-base / NEWS.html < prev    next >
Encoding:
Extensible Markup Language  |  2009-10-14  |  31.6 KB  |  764 lines

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.   <!DOCTYPE html
  3.             PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4.             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  23.   
  24.   
  25.    <head>
  26.  
  27.     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  28.     <link rev="made" href="mailto:gcc@gcc.gnu.org" />
  29.     <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
  30.     <link rel="stylesheet" type="text/css" href="/gnu.css" />
  31.     <link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
  32.   
  33.  <title>
  34. GCC 4.4 Release Series — Changes, New Features, and Fixes
  35. - GNU Project - Free Software Foundation (FSF)</title>
  36.    </head>
  37.  
  38.  
  39. <!-- GCC maintainers, please do not hesitate to update/contribute entries
  40.      concerning those part of GCC you maintain!  2002-03-23, Gerald.
  41. -->
  42.  
  43. <body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
  44.  
  45.  
  46.  
  47. <h1 align="center">
  48. GCC 4.4 Release Series<br />Changes, New Features, and Fixes
  49. </h1>
  50.  
  51. <h2>Caveats</h2>
  52.  
  53.   <ul>
  54.     <li><code>__builtin_stdarg_start</code> has been completely
  55.     removed from GCC.  Support for <code><varargs.h></code> had
  56.     been deprecated since GCC 4.0.  Use
  57.     <code>__builtin_va_start</code> as a replacement.  </li>
  58.  
  59.     <li>Some of the errors issued by the C++ front end that could be
  60.     downgraded to warnings in previous releases by using
  61.     <code>-fpermissive</code> are now warnings by default. They can be
  62.     converted into errors by using <code>-pedantic-errors</code>.</li>
  63.  
  64.     <li>Use of the cpp assertion extension will now emit a warning
  65.     when <code>-Wdeprecated</code> or <code>-pedantic</code> is used.
  66.     This extension has been deprecated for many years, but never
  67.     warned about.</li>
  68.  
  69.     <li>Packed bit-fields of type <code>char</code> were not properly
  70.     bit-packed on many targets prior to GCC 4.4.  On these targets, the fix in
  71.     GCC 4.4 causes an ABI change.  For example there is no longer a 4-bit
  72.     padding between field <code>a</code> and <code>b</code> in this structure:
  73.     <pre>
  74.     struct foo
  75.     {
  76.       char a:4;
  77.       char b:8;
  78.     } __attribute__ ((packed));</pre>
  79.     <p>There is a new warning to help identify fields that are affected:</p>
  80.     <pre>
  81.     foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4</pre>
  82.     <p>The warning can be disabled with
  83.     <code>-Wno-packed-bitfield-compat</code>.</p></li>
  84.  
  85.     <li>On ARM EABI targets, the C++ mangling of
  86.     the <code>va_list</code> type has been changed to conform to the
  87.     current revision of the EABI.  This does not affect the libstdc++
  88.     library included with GCC.</li>
  89.  
  90.     <li>The SCOUNT and POS bits of the MIPS DSP control register are now
  91.     treated as global. Previous versions of GCC treated these fields as
  92.     call-clobbered instead.</li>
  93.  
  94.     <li>The MIPS port no longer recognizes the <code>h</code>
  95.     <code>asm</code> constraint.  It was necessary to remove
  96.     this constraint in order to avoid generating unpredictable
  97.     code sequences.
  98.  
  99.     <p>One of the main uses of the <code>h</code> constraint
  100.     was to extract the high part of a multiplication on
  101.     64-bit targets.  For example:</p>
  102.     <pre>
  103.     asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));</pre>
  104.     <p>You can now achieve the same effect using 128-bit types:</p>
  105.     <pre>
  106.     typedef unsigned int uint128_t __attribute__((mode(TI)));
  107.     result = ((uint128_t) x * y) >> 64;</pre>
  108.     <p>The second sequence is better in many ways.  For example,
  109.     if <code>x</code> and <code>y</code> are constants, the
  110.     compiler can perform the multiplication at compile time.
  111.     If <code>x</code> and <code>y</code> are not constants,
  112.     the compiler can schedule the runtime multiplication
  113.     better than it can schedule an <code>asm</code> statement.</p>
  114.     </li>
  115.  
  116.     <li><p>Support for a number of older systems and recently
  117.     unmaintained or untested target ports of GCC has been declared
  118.     obsolete in GCC 4.4.  Unless there is activity to revive them, the
  119.     next release of GCC will have their sources permanently
  120.     <strong>removed</strong>.</p>
  121.  
  122.     <p>The following ports for individual systems on particular
  123.     architectures have been obsoleted:</p>
  124.  
  125.     <ul>
  126.       <li>Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
  127.         m68k-*-aout*)</li>
  128.       <li>Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
  129.         armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
  130.         sh-*-*).  This does not affect other more specific targets
  131.         using the COFF object format on those architectures, or the
  132.         more specific H8300 and SH targets (h8300-*-rtems*,
  133.         h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
  134.         sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).</li>
  135.       <li>2BSD on PDP-11 (pdp11-*-bsd)</li>
  136.       <li>AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
  137.         powerpc-ibm-aix4.[12]*)</li>
  138.       <li>Tuning support for Itanium1 (Merced) variants.  Note that
  139.         code tuned for Itanium2 should also run correctly on Itanium1.</li>
  140.     </ul>
  141.  
  142.     </li>
  143.  
  144.     <li>The <code>protoize</code> and <code>unprotoize</code>
  145.     utilities have been obsoleted and will be removed in GCC 4.5.
  146.     These utilities have not been installed by default since GCC
  147.     3.0.</li>
  148.  
  149.     <li>Support has been removed for all the <a
  150.     href="../gcc-4.3/changes.html#obsoleted">configurations obsoleted
  151.     in GCC 4.3</a>.</li>
  152.  
  153.     <li>Unknown <code>-Wno-*</code> options are now silently ignored
  154.     by GCC if no other diagnostics are issued. If other diagnostics
  155.     are issued, then GCC warns about the unknown options.</li>
  156.    
  157.     <li>More information on porting to GCC 4.4 from previous versions
  158.     of GCC can be found in
  159.     the <a href="http://gcc.gnu.org/gcc-4.4/porting_to.html">porting
  160.     guide</a> for this release.</li>
  161.  </ul>
  162.  
  163. <h2>General Optimizer Improvements</h2>
  164.  
  165.   <ul>
  166.     <li>A new command-line switch <code>-findirect-inlining</code> has been
  167.       added.  When turned on it allows the inliner to also inline indirect
  168.       calls that are discovered to have known targets at compile time
  169.       thanks to previous inlining.  </li>
  170.  
  171.     <li>A new command-line switch <code>-ftree-switch-conversion</code> has
  172.       been added.  This new pass turns simple initializations of scalar
  173.       variables in switch statements into initializations from a static array,
  174.       given that all the values are known at compile time and the ratio between
  175.       the new array size and the original switch branches does not exceed 
  176.       the parameter <code>--param switch-conversion-max-branch-ratio</code> 
  177.       (default is eight).  </li>
  178.  
  179.     <li>A new command-line switch <code>-ftree-builtin-call-dce</code>
  180.       has been added.  This optimization eliminates unnecessary calls
  181.       to certain builtin functions when the return value is not used,
  182.       in cases where the calls can not be eliminated entirely because
  183.       the function may set <code>errno</code>.  This optimization is
  184.       on by default at <code>-O2</code> and above.</li>
  185.  
  186.     <li>A new command-line switch <code>-fconserve-stack</code>
  187.       directs the compiler to minimize stack usage even if it makes
  188.       the generated code slower.  This affects inlining
  189.       decisions.</li>
  190.  
  191.     <li>When the assembler supports it, the compiler will now emit
  192.       unwind information using assembler <code>.cfi</code> directives.
  193.       This makes it possible to use such directives in inline
  194.       assembler code.  The new option <code>-fno-dwarf2-cfi-asm</code>
  195.       directs the compiler to not use <code>.cfi</code>
  196.       directives.</li>
  197.  
  198.     <li><p>The <a href="http://gcc.gnu.org/wiki/Graphite">Graphite</a>
  199.       branch has been merged.  This merge has brought in a new
  200.       framework for loop optimizations based on a polyhedral
  201.       intermediate representation.  These optimizations apply to all
  202.       the languages supported by GCC.  The following new code
  203.       transformations are available in GCC 4.4:</p>
  204.       
  205.       <ul>
  206.     <li><code>-floop-interchange</code>
  207.       performs loop interchange transformations on loops.  Interchanging two
  208.       nested loops switches the inner and outer loops.  For example, given a
  209.       loop like:
  210.       <pre>
  211.           DO J = 1, M
  212.             DO I = 1, N
  213.               A(J, I) = A(J, I) * C
  214.             ENDDO
  215.           ENDDO
  216.       </pre>
  217.         <p>loop interchange will transform the loop as if the user had written:</p>
  218.           <pre>
  219.           DO I = 1, N
  220.             DO J = 1, M
  221.               A(J, I) = A(J, I) * C
  222.             ENDDO
  223.           ENDDO
  224.           </pre>
  225.         <p>which can be beneficial when <code>N</code> is larger than the caches,
  226.           because in Fortran, the elements of an array are stored in memory
  227.           contiguously by column, and the original loop iterates over rows,
  228.           potentially creating at each access a cache miss.</p>
  229.     </li>
  230.     <li><code>-floop-strip-mine</code>
  231.       performs loop strip mining transformations on loops.  Strip mining
  232.       splits a loop into two nested loops.  The outer loop has strides
  233.       equal to the strip size and the inner loop has strides of the
  234.       original loop within a strip.  For example, given a loop like:
  235.       <pre>
  236.           DO I = 1, N
  237.             A(I) = A(I) + C
  238.           ENDDO
  239.       </pre>
  240.       <p>loop strip mining will transform the loop as if the user had written:</p>
  241.         <pre>
  242.           DO II = 1, N, 4
  243.             DO I = II, min (II + 3, N)
  244.               A(I) = A(I) + C
  245.             ENDDO
  246.           ENDDO
  247.         </pre>
  248.     </li>
  249.     <li><code>-floop-block</code>
  250.       performs loop blocking transformations on loops.  Blocking strip mines
  251.       each loop in the loop nest such that the memory accesses of the
  252.       element loops fit inside caches.  For example, given a loop like:
  253.       <pre>
  254.           DO I = 1, N
  255.             DO J = 1, M
  256.               A(J, I) = B(I) + C(J)
  257.             ENDDO
  258.           ENDDO
  259.       </pre>
  260.       <p>loop blocking will transform the loop as if the user had written:</p>
  261.       <pre>
  262.           DO II = 1, N, 64
  263.             DO JJ = 1, M, 64
  264.               DO I = II, min (II + 63, N)
  265.                 DO J = JJ, min (JJ + 63, M)
  266.                   A(J, I) = B(I) + C(J)
  267.                 ENDDO
  268.               ENDDO
  269.             ENDDO
  270.           ENDDO
  271.       </pre>
  272.       <p>which can be beneficial when <code>M</code> is larger than the caches,
  273.         because the innermost loop will iterate over a smaller amount of data
  274.         that can be kept in the caches.</p>
  275.     </li>
  276.       </ul>
  277.     </li>
  278.     <li>A new register allocator has replaced the old one.  It is
  279.         called <em>integrated register allocator</em> (<em>IRA</em>)
  280.         because coalescing, register live range splitting, and hard
  281.         register preferencing are done on-the-fly during coloring.  It
  282.         also has better integration with the reload pass.  IRA is a
  283.         regional register allocator which uses modern Chaitin-Briggs
  284.         coloring instead of Chow's priority coloring used in the old
  285.         register allocator.  More info about IRA internals and options
  286.         can be found in the GCC manuals.
  287.     </li>
  288.     <li>A new instruction scheduler and software pipeliner, based on 
  289.         the selective scheduling approach, has been added.  The new pass
  290.         performs instruction unification, register renaming, substitution
  291.         through register copies, and speculation during scheduling.
  292.         The software pipeliner is able to pipeline non-countable loops.
  293.         The new pass is targeted at scheduling-eager in-order platforms.
  294.         In GCC 4.4 it is available for the Intel Itanium platform
  295.         working by default as the second scheduling pass (after register
  296.         allocation) at the <code>-O3</code> optimization level.
  297.     </li>
  298.  
  299.     <li>When using <code>-fprofile-generate</code> with a
  300.       multi-threaded program, the profile counts may be slightly wrong
  301.       due to race conditions.  The
  302.       new <code>-fprofile-correction</code> option directs the
  303.       compiler to apply heuristics to smooth out the inconsistencies.
  304.       By default the compiler will give an error message when it finds
  305.       an inconsistent profile.</li>
  306.  
  307.     <li>The new <code>-fprofile-dir=PATH</code> option permits setting
  308.       the directory where profile data files are stored when
  309.       using <code>-fprofile-generate</code> and friends, and the
  310.       directory used when reading profile data files
  311.       using <code>-fprofile-use</code> and friends.</li>
  312.  
  313.   </ul>
  314.  
  315. <h2>New warning options</h2>
  316.   <ul>
  317.  
  318.     <li>The new <code>-Wframe-larger-than=NUMBER</code> option directs
  319.       GCC to emit a warning if any stack frame is larger
  320.       than <code>NUMBER</code> bytes.  This may be used to help ensure that
  321.       code fits within a limited amount of stack space.</li>
  322.  
  323.     <li>The new <code>-Wno-mudflap</code> option disables warnings
  324.       about constructs which can not be instrumented when
  325.       using <code>-fmudflap</code>.</li>
  326.  
  327.   </ul>
  328.  
  329. <h2>New Languages and Language specific improvements</h2>
  330.  
  331.   <ul>
  332.     <li>Version 3.0 of the <a
  333.     href="http://openmp.org/wp/openmp-specifications/">OpenMP specification</a>
  334.     is now supported for the C, C++, and Fortran compilers.</li>
  335.   </ul>
  336.  
  337. <h3>C family</h3>
  338.  
  339.   <ul>
  340.     <li>A new <code>optimize</code> attribute was added to allow programmers to
  341.     change the optimization level and particular optimization options for an
  342.     individual function.  You can also change the optimization options via the
  343.     <code>GCC optimize</code> pragma for functions defined after the pragma.
  344.     The <code>GCC push_options</code> pragma and the
  345.     <code>GCC pop_options</code> pragma allow you temporarily save and restore
  346.     the options used.  The <code>GCC reset_options</code> pragma restores the
  347.     options to what was specified on the command line.
  348.     </li>
  349.  
  350.     <li>Uninitialized warnings do not require enabling optimization
  351.     anymore, that is, <code>-Wuninitialized</code> can be used
  352.     together with <code>-O0</code>.  Nonetheless, the warnings given
  353.     by <code>-Wuninitialized</code> will probably be more accurate if
  354.     optimization is enabled.
  355.     </li>
  356.  
  357.     <li><code>-Wparentheses</code> now warns about expressions such as
  358.     <code>(!x | y)</code> and <code>(!x & y)</code>. Using explicit
  359.     parentheses, such as in <code>((!x) | y)</code>, silences this
  360.     warning.</li>
  361.  
  362.     <li><code>-Wsequence-points</code> now warns within
  363.     <code>if</code>, <code>while</code>,<code>do while</code>
  364.     and <code>for</code> conditions, and within <code>for</code>
  365.     begin/end expressions.
  366.     </li>
  367.  
  368.     <li>A new option <code>-dU</code> is available to dump definitions
  369.     of preprocessor macros that are tested or expanded.</li>
  370.  
  371.   </ul>
  372.  
  373. <h3>C++</h3>
  374.   <ul>
  375.     <li><a href="cxx0x_status.html">Improved experimental support for
  376.     the upcoming ISO C++ standard, C++0x</a>. Including support
  377.     for <code>auto</code>, inline namespaces, generalized initializer
  378.     lists, defaulted and deleted functions, new character types, and
  379.     scoped enums.</li>
  380.  
  381.     <li> Those errors that may be downgraded to warnings to build
  382.     legacy code now mention <code>-fpermissive</code> when
  383.     <code>-fdiagnostics-show-option</code> is enabled.</li>
  384.  
  385.     <li><code>-Wconversion</code> now warns if the result of a
  386.     <code>static_cast</code> to enumeral type is unspecified because
  387.     the value is outside the range of the enumeral type.
  388.     </li>
  389.  
  390.     <li><code>-Wuninitialized</code> now warns if a non-static
  391.     reference or non-static <code>const</code> member appears in a
  392.     class without constructors.
  393.     </li>
  394.  
  395.     <li>G++ now properly implements value-initialization, so objects with
  396.     an initializer of <code>()</code> and an implicitly defined default
  397.     constructor will be zero-initialized before the default constructor is
  398.     called.</li>
  399.   </ul>
  400.   
  401.   <h4>Runtime Library (libstdc++)</h4>
  402.   <ul>
  403.     <li><a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#id476343">
  404.     Improved experimental support for the upcoming ISO C++ standard, 
  405.     C++0x</a>, including:
  406.       <ul>
  407.       <li>Support for <chrono>, <condition_variable>, 
  408.     <cstdatomic>, <forward_list>, <initializer_list>, 
  409.     <mutex>, <ratio>, <system_error>, and 
  410.     <thread>.</li>
  411.       <li><code>unique_ptr</code>, <algorithm>
  412.     additions, exception propagation, and support for the new
  413.     character types in <string> and <limits>.</li>
  414.       <li>Existing facilities now exploit initializer lists, defaulted and 
  415.     deleted functions, and the newly implemented core C++0x features.</li>
  416.       <li>The standard containers are more efficient together with stateful
  417.     allocators.</li>
  418.       </ul>
  419.     </li>
  420.     <li>Experimental support for non-standard pointer types in containers.</li>
  421.     <li>The long standing libstdc++/30928 has been fixed for targets running
  422.       glibc 2.10 or later.</li>
  423.     <li>As usual, many small and larger bug fixes, in particular quite a few
  424.       corner cases in <locale>.</li>
  425.   </ul>
  426.  
  427. <h3>Fortran</h3>
  428.   <ul>
  429.     <li>GNU Fortran now employs libcpp directly instead of using cc1 as an
  430.     external preprocessor. The <a
  431.     href="http://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html">
  432.     <code>-cpp</code></a> option was added to allow manual invocation of the
  433.     preprocessor without relying on filename extensions.</li>
  434.  
  435.     <li>The <a
  436.     href="http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125">
  437.     <code>-Warray-temporaries</code></a> option warns about array temporaries
  438.     generated by the compiler, as an aid to optimization.</li>
  439.  
  440.     <li>The <a
  441.     href="http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221">
  442.     <code>-fcheck-array-temporaries</code></a> option has been added, printing
  443.     a notification at run time, when an array temporary had to be created for
  444.     an function argument. Contrary to <code>-Warray-temporaries</code> the
  445.     warning is only printed if the array is noncontiguous.</li>
  446.  
  447.     <li>Improved generation of DWARF debugging symbols</li>
  448.  
  449.     <li>If using an intrinsic not part of the selected standard (via
  450.       <code>-std=</code> and <code>-fall-intrinsics</code>) gfortran will now
  451.       treat it as if this procedure were declared <code>EXTERNAL</code> and
  452.       try to link to a user-supplied procedure. <code>-Wintrinsics-std</code>
  453.       will warn whenever this happens. The now-useless option
  454.       <code>-Wnonstd-intrinsic</code> was removed.</li>
  455.  
  456.     <li>The flag <code>-falign-commons</code> has been added to control the
  457.       alignment of variables in COMMON blocks, which is enabled by default in
  458.       line with previous GCC version. Using <code>-fno-align-commons</code> one
  459.       can force commons to be contiguous in memory as required by the Fortran
  460.       standard, however, this slows down the memory access. The option
  461.       <code>-Walign-commons</code>, which is enabled by default, warns when
  462.       padding bytes were added for alignment. The proper solution is to sort
  463.       the common objects by decreasing storage size, which avoids the alignment
  464.       problems.</li>
  465.  
  466.     <li>Fortran 2003 support has been extended: 
  467.       <ul>
  468.         <li>Wide characters (ISO 10646, UCS-4, <code>kind=4</code>) and UTF-8
  469.           I/O is now supported (except internal reads from/writes to wide
  470.           strings). <a
  471.           href="http://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34">
  472.           <code>-fbackslash</code></a> now supports also
  473.           <code>\u<em>nnnn</em></code> and <code>\U<em>nnnnnnnn</em></code>
  474.           to enter Unicode characters.</li>
  475.         <li>Asynchronous I/O (implemented as synchronous I/O) and the
  476.           <code>decimal=</code>, <code>size=</code>, <code>sign=</code>,
  477.           <code>pad=</code>, <code>blank=</code>, and <code>delim=</code>
  478.           specifiers are now supported in I/O statements.</li>
  479.         <li>Support for Fortran 2003 structure constructors and for
  480.           array constructor with typespec has been added.</li>
  481.         <li>Procedure Pointers (but not yet as component in derived types
  482.           and as function results) are now supported.</li>
  483.         <li>Abstract types, type extension, and type-bound procedures (both
  484.           <code>PROCEDURE</code> and <code>GENERIC</code> but not as
  485.           operators). Note: As <code>CLASS</code>/polymorphyic types are
  486.           not implemented, type-bound procedures with <code>PASS</code>
  487.           accept as non-standard extension <code>TYPE</code> arguments.</li>
  488.       </ul>
  489.     </li>
  490.     <li>Fortran 2008 support has been added:
  491.       <ul>
  492.         <li>The <code>-std=f2008</code> option and support for the file
  493.           extensions <code>.f2008</code> and <code>.F2008</code> has been
  494.           added.</li>
  495.         <li>The g0 format descriptor is now supported.</li>
  496.         <li>The Fortran 2008 mathematical intrinsics <code>ASINH</code>,
  497.           <code>ACOSH</code>, <code>ATANH</code>, <code>ERF</code>,
  498.           <code>ERFC</code>, <code>GAMMA</code>, <code>LOG_GAMMA</code>,
  499.           <code>BESSEL_*</code>, <code>HYPOT</code>,
  500.           and <code>ERFC_SCALED</code> are now available
  501.           (some of them existed as GNU extension before). Note: The hyperbolic
  502.           functions are not yet supporting complex arguments and the three-
  503.           argument version of <code>BESSEL_*N</code> is not available.</li>
  504.         <li>The bit intrinsics <code>LEADZ</code> and <code>TRAILZ</code>
  505.           have been added.</li>
  506.       </ul>
  507.     </li>
  508.   </ul>
  509.  
  510. <h3>Java (GCJ)</h3>
  511.  
  512. <h3>Ada</h3>
  513. <ul>
  514.   <li>The Ada runtime now supports multilibs on many platforms including 
  515.     x86_64, SPARC and PowerPC. Their build is enabled by default.</li>
  516. </ul>
  517.  
  518. <h2 id="targets">New Targets and Target Specific Improvements</h2>
  519.  
  520. <h3>ARM</h3>
  521.   <ul>
  522.     <li>GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
  523.     Cortex-R4F processors and has many other improvements to
  524.     optimization for ARM processors.</li>
  525.     <li>GCC now supports the VFPv3 variant with 16 double-precision
  526.     registers with <code>-mfpu=vfpv3-d16</code>.  The
  527.     option <code>-mfpu=vfp3</code> has been renamed
  528.     to <code>-mfpu=vfpv3</code>.</li>
  529.     <li>GCC now supports the <code>-mfix-cortex-m3-ldrd</code> option
  530.     to work around an erratum on Cortex-M3 processors.</li>
  531.     <li>GCC now supports the <code>__sync_*</code> atomic operations
  532.     for ARM EABI GNU/Linux.</li>
  533.     <li>The section anchors optimization is now enabled by default
  534.     when optimizing for ARM.</li>
  535.     <li>GCC now uses a new EABI-compatible profiling interface for
  536.     EABI targets.  This requires a
  537.     function <code>__gnu_mcount_nc</code>, which is provided by GNU
  538.     libc versions 2.8 and later.</li>
  539.   </ul>
  540.  
  541. <h3>AVR</h3>
  542.   <ul>
  543.     <li>The <code>-mno-tablejump</code> option has been deprecated because
  544.     it has the same effect as the <code>-fno-jump-tables</code> option.</li>
  545.     <li>Added support for these new AVR devices:
  546.       <ul>
  547.         <li>ATA6289</li>
  548.         <li>ATtiny13A</li>
  549.         <li>ATtiny87</li>
  550.         <li>ATtiny167</li>
  551.         <li>ATtiny327</li>
  552.         <li>ATmega8C1</li>
  553.         <li>ATmega16C1</li>
  554.         <li>ATmega32C1</li>
  555.         <li>ATmega8M1</li>
  556.         <li>ATmega16M1</li>
  557.         <li>ATmega32M1</li>
  558.         <li>ATmega32U4</li>
  559.         <li>ATmega16HVB</li>
  560.         <li>ATmega4HVD</li>
  561.         <li>ATmega8HVD</li>
  562.         <li>ATmega64C1</li>
  563.         <li>ATmega64M1</li>
  564.         <li>ATmega16U4</li>
  565.         <li>ATmega32U6</li>
  566.         <li>ATmega128RFA1</li>
  567.         <li>AT90PWM81</li>
  568.         <li>AT90SCR100</li>
  569.         <li>M3000F</li>
  570.         <li>M3000S</li>
  571.         <li>M3001B</li>
  572.       </ul>
  573.     </li>
  574.   </ul>
  575.  
  576. <h3>IA-32/x86-64</h3>
  577.   <ul>
  578.     <li>Support for Intel AES built-in functions and code generation is
  579.     available via <code>-maes</code>.</li>
  580.     <li>Support for Intel PCLMUL built-in function and code generation is
  581.     available via <code>-mpclmul</code>.</li>
  582.     <li>Support for Intel AVX built-in functions and code generation is
  583.     available via <code>-mavx</code>.</li>
  584.     <li>Automatically align the stack for local variables with alignment
  585.     requirement. </li>
  586.     <li>GCC can now utilize the SVML library for vectorizing calls to
  587.     a set of C99 functions if <code>-mveclibabi=svml</code> is specified
  588.     and you link to an SVML ABI compatible library.</li>
  589.     <li>A new <code>target</code> attribute was added to allow programmers to change the target options like <code>-msse2</code> or <code>-march=k8</code> for an individual function.  You can also change the target options via the <code>GCC target</code> pragma for functions defined after the pragma.</li>
  590.     <li>GCC can now be configured with
  591.     options <code>--with-arch-32</code>, <code>--with-arch-64</code>,
  592.     <code>--with-cpu-32</code>, <code>--with-cpu-64</code>,
  593.     <code>--with-tune-32</code> and <code>--with-tune-64</code> to
  594.     control the default optimization separately for 32-bit and 64-bit
  595.     modes.</li>
  596.   </ul>
  597.  
  598. <h3>IA-32/IA64</h3>
  599.   <ul>
  600.     <li>Support for <code>__float128</code> (TFmode) IEEE quad type and
  601.     corresponding TCmode IEEE complex quad type is available
  602.     via the soft-fp library on <code>IA-32/IA64</code> targets.
  603.     This includes basic arithmetic operations (addition, subtraction,
  604.     negation, multiplication and division) on <code>__float128</code>
  605.     real and TCmode complex values, the full set of IEEE comparisons
  606.     between <code>__float128</code> values, conversions to and from
  607.     <code>float</code>, <code>double</code> and <code>long double</code>
  608.     floating point types, as well as conversions to and from
  609.     <code>signed</code> or <code>unsigned</code> integer,
  610.     <code>signed</code> or <code>unsigned long</code> integer and
  611.     <code>signed</code> or <code>unsigned</code> quad
  612.     (TImode, <code>IA64</code> only) integer types.  Additionally,
  613.     all operations generate the full set of IEEE exceptions and support
  614.     the full set of IEEE rounding modes.</li>
  615.   </ul>
  616.  
  617. <h3>M68K/ColdFire</h3>
  618.   <ul>
  619.     <li>GCC now supports instruction scheduling for ColdFire V1, V3
  620.     and V4 processors.  (Scheduling support for ColdFire V2 processors
  621.     was added in GCC 4.3.)</li>
  622.     <li>GCC now supports the <code>-mxgot</code> option to support
  623.     programs requiring many GOT entries on ColdFire.</li>
  624.     <li>The m68k-*-linux-gnu target now builds multilibs by
  625.     default.</li>
  626.   </ul>
  627.  
  628. <h3>MIPS</h3>
  629.   <ul>
  630.     <li><p>MIPS Technologies have extended the original MIPS SVR4 ABI
  631.         to include support for procedure linkage tables (PLTs)
  632.         and copy relocations.  These extensions allow GNU/Linux
  633.         executables to use a significantly more efficient code
  634.         model than the one defined by the original ABI.</p>
  635.  
  636.         <p>GCC support for this code model is available via a
  637.         new command-line option, <code>-mplt</code>.  There is also
  638.         a new configure-time option, <code>--with-mips-plt</code>,
  639.         to make <code>-mplt</code> the default.</p>
  640.  
  641.         <p>The new code model requires support from the assembler,
  642.         the linker, and the runtime C library.  This support is available
  643.         in binutils 2.19 and GLIBC 2.9.</p></li>
  644.     <li>GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
  645.         and 32-bit GNU/Linux shared libraries.  This feature requires
  646.         GNU binutils 2.19 or above.</li>
  647.     <li>Support for RMI's XLR processor is now available through the
  648.         <code>-march=xlr</code> and <code>-mtune=xlr</code> options.</li>
  649.     <li>64-bit targets can now perform 128-bit multiplications inline,
  650.         instead of relying on a <code>libgcc</code> function.</li>
  651.     <li>Native GNU/Linux toolchains now support <code>-march=native</code>
  652.         and <code>-mtune=native</code>, which select the host processor.</li>
  653.     <li>GCC now supports the R10K, R12K, R14K and R16K processors.  The
  654.         canonical <code>-march=</code> and <code>-mtune=</code> names for
  655.         these processors are <code>r10000</code>, <code>r12000</code>,
  656.         <code>r14000</code> and <code>r16000</code> respectively.</li>
  657.     <li>GCC can now work around the side effects of speculative execution
  658.         on R10K processors.  Please see the documentation of the
  659.         <code>-mr10k-cache-barrier</code> option for details.</li>
  660.     <li>Support for the MIPS64 Release 2 instruction set has been added.  The
  661.         option <code>-march=mips64r2</code> enables generation of these
  662.         instructions.</li>
  663.     <li>GCC now supports Cavium Networks' Octeon processor.  This support is
  664.         available through the <code>-march=octeon</code> and
  665.         <code>-mtune=octeon</code> options.</li>
  666.     <li>GCC now supports STMicroelectronics' Loongson 2E/2F processors.  The
  667.         canonical <code>-march=</code> and <code>-mtune=</code> names for
  668.         these processors are <code>loongson2e</code> and
  669.         <code>loongson2f</code>.</li>
  670.   </ul>
  671.  
  672. <h3 id="picochip">picochip</h3>
  673.  
  674.   <p>Picochip is a 16-bit processor.  A typical picoChip contains over 250
  675.   small cores, each with small amounts of memory. There are three processor
  676.   variants (STAN, MEM and CTRL) with different instruction sets and memory
  677.   configurations and they can be chosen using the <code>-mae</code> option.
  678.   </p>
  679.  
  680.   <p>This port is intended to be a "C" only port.</p>
  681.  
  682. <h3>Power Architecture and PowerPC</h3>
  683.   <ul>
  684.     <li>GCC now supports the e300c2, e300c3 and e500mc processors.</li>
  685.     <li>GCC now supports Xilinx processors with a single-precision FPU.</li>
  686.     <li>Decimal floating point is now supported for e500 processors.</li>
  687.   </ul>
  688.  
  689. <h3>S/390, zSeries and System z9/z10</h3>
  690.   <ul>
  691.     <li>Support for the IBM System z10 EC/BC processor has
  692.         been added.  When using the <code>-march=z10</code> option,
  693.         the compiler will generate code making use of instructions
  694.         provided by the General-Instruction-Extension Facility and the
  695.         Execute-Extension Facility.</li>
  696.   </ul>
  697.  
  698. <h3>VxWorks</h3>
  699.   <ul>
  700.     <li>GCC now supports the thread-local storage mechanism used on
  701.     VxWorks.</li>
  702.   </ul>
  703.  
  704. <h3>Xtensa</h3>
  705.   <ul>
  706.     <li>GCC now supports thread-local storage (TLS) for Xtensa processor
  707.     configurations that include the Thread Pointer option.  TLS also requires
  708.     support from the assembler and linker; this support is provided in the
  709.     GNU binutils beginning with version 2.19.</li>
  710.   </ul>
  711.  
  712. <h2>Documentation improvements</h2>
  713.  
  714. <h2>Other significant improvements</h2>
  715.  
  716.  
  717.  
  718.  
  719. <!-- ==================================================================== -->
  720.  
  721. <div class="copyright">
  722.  
  723. <p>Please send FSF & GNU inquiries & questions to
  724. <a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
  725. There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
  726. to contact</a> the FSF.</p>
  727.  
  728. <p>These pages are maintained by
  729. <a href="http://gcc.gnu.org/about.html">the GCC team</a>.</p>
  730.  
  731. <address>For questions related to the use of GCC, please consult these web
  732. pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
  733. that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
  734. mailing list might help.<br />
  735. Please send comments on these web pages and the development of GCC to our
  736. developer mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
  737. or <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.  All of our lists
  738. have <a href="http://gcc.gnu.org/lists.html">public archives</a>.
  739. </address>
  740.  
  741. <p>Copyright (C) Free Software Foundation, Inc.,
  742. 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.</p>
  743. <p>Verbatim copying and distribution of this entire article is
  744. permitted in any medium, provided this notice is preserved.</p>
  745.  
  746. <table width="100%" border="0"><tr><td>
  747.   <!-- IGNORE DIFF -->Last modified 2009-04-21
  748. </td><td align="right" valign="bottom">
  749.   <a href="http://validator.w3.org/check/referer">
  750.       <img src="http://www.w3.org/Icons/valid-xhtml10"
  751.      alt="Valid XHTML 1.0" border="0" width="88" height="31" />
  752.    
  753.   </a>
  754. </td></tr></table>
  755.  
  756. </div>
  757.  
  758. <!-- ==================================================================== -->
  759.  
  760. </body>
  761.      </html>
  762.   
  763.  
  764.